package GUI;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;

import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;

import Baza.BazaDanych;
import Baza.DataFormats;
import Baza.Konfiguracja;

public class DodajPracownika {
	JFrame frame;
	private Konfiguracja konfiguracja = new Konfiguracja();
	
	public DodajPracownika() {
		createAndShowGUI();
	}
	
	private JFrame createAndShowGUI(){
		frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		addComponentToPane(frame.getContentPane());
		frame.pack();
		frame.setLocation(50, 50);
		frame.setResizable(false);
        frame.setVisible(true);
        frame.setTitle(konfiguracja.getFarmaceutaNewField());
        
        return frame;
	}

	private void addComponentToPane(Container pane){
		JPanel addEmployee = addEmployeePanel();
		pane.add(addEmployee);
	}
	
	private JTextField name, surname, address, rLogin, email, stanowisko;
	private JFormattedTextField phone, pesel;
	private JPasswordField rPassword;
		
	private JPanel addEmployeePanel(){
		JPanel panel = new JPanel(new GridBagLayout());
		name = new JTextField(12);
		surname = new JTextField(12);
		address = new JTextField(12);
		rLogin = new JTextField(12);
		email = new JTextField(12);
		email.setPreferredSize( new Dimension( konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		phone = getPhoneField();
		pesel = getPeselField();
		stanowisko = new JTextField(12);
		rPassword = new JPasswordField(12);
		rPassword.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		JButton registerButton = getRegisterButton();
		JButton cancelButton = getCancelButton();	
		
		GridBagConstraints grid = new GridBagConstraints();
		grid.gridwidth = GridBagConstraints.REMAINDER;
		
		panel.add(new JLabel(konfiguracja.getRegisterButton()), grid);
		panel.add(new JLabel(konfiguracja.getLoginField()));
		panel.add(rLogin,grid);
		panel.add(new JLabel(konfiguracja.getPasswordField()));
		panel.add(rPassword,grid);
		panel.add(new JLabel(konfiguracja.getEmailField()));
		panel.add(email,grid);
		panel.add(new JLabel(konfiguracja.getNameField()));
		panel.add(name,grid);
		panel.add(new JLabel(konfiguracja.getSurnameField()));
		panel.add(surname,grid);
		panel.add(new JLabel(konfiguracja.getPeselField()));
		panel.add(pesel,grid);
		panel.add(new JLabel(konfiguracja.getPhoneField()));
		panel.add(phone,grid);
		panel.add(new JLabel(konfiguracja.getAddressField()));
		panel.add(address,grid);
		panel.add(new JLabel(konfiguracja.getJobField()));
		panel.add(stanowisko, grid);
		panel.add(registerButton);
		panel.add(cancelButton);
		
		return panel;
	}
	/**
	 * Tworzenie poszczególnych elementów panelu dla ekranu rejestracji
	 */
	private JFormattedTextField getPhoneField(){
		MaskFormatter phoneMask = null;
		try {
        	phoneMask = new MaskFormatter("###########");
        	phoneMask.setPlaceholderCharacter('_');
        } catch (ParseException e) {
            e.printStackTrace();
        }
		JFormattedTextField phone = new JFormattedTextField(phoneMask);
		phone.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		
		return phone;
	}
	private JFormattedTextField getPeselField(){
		MaskFormatter peselMask = null;
        try {
        	peselMask = new MaskFormatter("###########");
        	peselMask.setPlaceholderCharacter('_');
        } catch (ParseException e) {
            e.printStackTrace();
        }
        JFormattedTextField pesel = new JFormattedTextField(peselMask);
		pesel.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		
		return pesel;
	}
	private JButton getRegisterButton(){
		JButton register = new JButton(konfiguracja.getRegisterButton());
		register.addActionListener(new ActionListener() {
			@Override
			@SuppressWarnings("deprecation")
			public void actionPerformed(ActionEvent event) {
				JFrame errorFrame = null;
				BazaDanych database = new BazaDanych();
				if(name.getText().equals("")||surname.getText().equals("")||pesel.getText().equals("___________")||email.getText().equals("")||rLogin.getText().equals("")||rPassword.getText().equals("")||phone.getText().equals("___________")||address.getText().equals("")){
					JOptionPane.showMessageDialog(errorFrame, konfiguracja.getRegisterEmptyError(), konfiguracja.getErrorMessage(), JOptionPane.WARNING_MESSAGE);
				}else if(!DataFormats.isNumberLetter(rLogin.getText())){
					JOptionPane.showMessageDialog(errorFrame, konfiguracja.getLoginField()+konfiguracja.getNumberLetterTypeError(), konfiguracja.getErrorMessage(), JOptionPane.WARNING_MESSAGE);
				}else if(!DataFormats.isNumberLetter(rPassword.getText())){
					JOptionPane.showMessageDialog(errorFrame, konfiguracja.getPasswordField()+konfiguracja.getNumberLetterTypeError(), konfiguracja.getErrorMessage(), JOptionPane.WARNING_MESSAGE);
				}else if(!DataFormats.isMonkey(email.getText())){
					JOptionPane.showMessageDialog(errorFrame, konfiguracja.getEmailTypeError(), konfiguracja.getErrorMessage(), JOptionPane.WARNING_MESSAGE);
				}else if(!DataFormats.isLetter(name.getText())){
					JOptionPane.showMessageDialog(errorFrame, konfiguracja.getLetterTypeError(), konfiguracja.getErrorMessage(), JOptionPane.WARNING_MESSAGE);
				}else if(!DataFormats.isLetter(surname.getText())){
					JOptionPane.showMessageDialog(errorFrame, konfiguracja.getLetterTypeError(), konfiguracja.getErrorMessage(), JOptionPane.WARNING_MESSAGE);
				}else{
					if(database.checkLogin(rLogin.getText().trim(), true)){
						JOptionPane.showMessageDialog(errorFrame, konfiguracja.getLoginExistError(), konfiguracja.getErrorMessage(), JOptionPane.WARNING_MESSAGE);
					}else if(database.checkPesel(Long.parseLong(pesel.getText()), true)){
						JOptionPane.showMessageDialog(errorFrame, konfiguracja.getPeselExistError(), konfiguracja.getErrorMessage(), JOptionPane.WARNING_MESSAGE);
					}else{
						database.insertFarmaceuta(name.getText().trim(), surname.getText().trim(), Long.parseLong(pesel.getText().trim()), address.getText().trim(), email.getText().trim(), rLogin.getText().trim(), rPassword.getText().trim(), stanowisko.getText().trim());
						frame.dispose();
					}
				}
				database.closeConnection();
			}
		});
		return register;
	}
	
	private JButton getCancelButton(){
		JButton cancel = new JButton(konfiguracja.getCancelButton());
		cancel.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				frame.dispose();
			}
		});
		return cancel;
	}
}
